package dongshi.daddy.huohuo;

import sun.security.pkcs11.wrapper.Functions;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class PredicateMain {

    public static void main(String[] args) {
        /*Predicate<Integer> p1 = (t) -> {
            t = t * 2;
            return t > 100;
        };
        System.out.println(p1.test(99));
        Predicate<Integer> p2 = (t) -> {
            t = t * 2;
            return t < 100;
        };
        Predicate<Integer> p3 = p1.and(p2);
        System.out.println(p3.test(80));*/
        /*Object o1 = new Object();
        Predicate<Object> equal = Predicate.isEqual(o1);
        Object o2 = new Object();
        System.out.println(equal.test(o2));*/

        /*Predicate<Integer> p1 = (t) -> { // 这里是test方法的方法体
            t = t * 2;
            return t > 100;
        };
//        System.out.println(p1.test(99));
        Predicate<Integer> p2 = (t) -> { // 这里是test方法的方法体
            t = t / 2;
            return t > 99;
        };
        Predicate<Integer> p2_1 = (t) -> { // 这里是test方法的方法体
            t = t / 2;
            return t > 999;
        };
        Predicate<Integer> p3 = p1.and(p2).and(p2_1);
        *//*
        相当于如下代码：
        { // 这里是test方法的方法体
            t = t * 2;
            return t > 100;
        } && { // 这里是test方法的方法体
            t = t / 2;
            return t > 99;
        }
         *//*
        System.out.println(p3.test(600));
        // 还可以继续and

        Predicate<Integer> p4 = (t) -> { // 这里是test方法的方法体
            t = t / 2;
            return t > 999;
        };*/

        /*Predicate<Integer> p4 = (t) -> { // 这里是test方法的方法体
            t = t / 2;
            return t > 999;
        };
        Predicate<Integer> negate = p4.negate();
        System.out.println(negate.test(888));*/
        /*Predicate<Integer> p4 = (t) -> { // 这里是test方法的方法体
            t = t / 2;
            return t > 999;
        };
        Predicate<Integer> p4_1 = (t) -> { // 这里是test方法的方法体
            t = t * 2;
            return t > 688;
        };
        Predicate<Integer> or = p4.or(p4_1);
        System.out.println(or.test(100));*/

        /*Function<String, String> f1 = (v) -> {
            return v + "A";
        };
//        System.out.println(f1.apply("张三"));
        Function<String, String> f2 = (v) -> {
            return v + "B";
        };
        Function<String, String> f3 = (v) -> {
            return v + "C";
        };
        Function<String, String> compose = f1.andThen(f2).andThen(f3);
        System.out.println(compose.apply("张三"));*/

        /*Function<String, String> f1 = Function.identity();
        System.out.println(f1.apply("照镜子！！！"));*/
        /*Consumer<String> c1 = (v) -> {
            System.out.println("执行业务操作了A" + v);
        };
        Consumer<String> c2 = (v) -> {
            System.out.println("执行业务操作了B" + v);
        };
        c1.andThen(c2).accept("lab");*/
        /*Supplier<Long> supplier = () -> {
            return System.currentTimeMillis();
        };
        System.out.println(supplier.get());*/

        A a = new A();
        GreetingService service = a::sayHi;
    }

    interface GreetingService {
        void sayMessage(String message);
    }


}
